//这个页面是对用户登录和注册的控制器类（处理接口）

// 模块导入
import UsersService from '../../services/users.service';
import { Request, Response } from 'express';
import jsonwebtoken from 'jsonwebtoken';
// token加密所使用的秘钥
const tokenKey = 'qwer1234'
// 定义控制器类
export class Controller {
  // 登录方法
  login(req: Request, res: Response): void {
    // 获取客户端请求携带的用户名和密码
    let username = req.body.username;
    let password = req.body.password;
    // 验证数据是否为空
    if (username && password) {
        // 调用服务类进行登录操作
        UsersService.login(username, password).then(data => {
            // 登录成功后，生成token，和用户信息一起返回给客户端
            let token = jsonwebtoken.sign({
                role: data.role,
                id: data.id
            }, tokenKey, {
                expiresIn: 3600 * 24 * 7
            })
            res.json({
                msg: 'ok',
                info: data,
                token: token
            })
        }).catch(error => {
            res.json({
                error: error,
                msg: 'error'
            })
        })
    } else {
        res.json({
            error: '请输入正确的用户名和密码',
            msg: 'error'
        })
    }
  }
  // 注册方法
  singUp(req: Request, res: Response): void {
    // 获取注册时的用户信息
    let username = req.body.username;
    let password = req.body.password;
    let role = req.body.role;
    // 对信息有效性进行简单验证
    if (username && password && role && (role == 'admin' || role == 'normal')) {
        // 进行注册动作
        UsersService.signUp(username, password, role).then(()=>{
            res.json({
                msg: 'ok'
            })
        }).catch(error => { 
            res.json({
                error: error,
                msg: 'error'
            })
        })
    } else {
        res.json({
            error: '请输入正确的用户信息',
            msg: 'error'
        })
    }
  }




// 修改密码方法
  changePassword(req: Request, res: Response): void {
    // 从token中获取用户信息
    let user = req.headers.user as any;
    if (!user) {
      res.status(401).json({
        error: '请先登录',
        msg: 'error'
      });
      return;
    }

    // 获取请求参数
    let oldPassword = req.body.oldPassword;
    let newPassword = req.body.newPassword;

    // 验证参数
    if (!oldPassword || !newPassword) {
      res.json({
        error: '请输入原密码和新密码',
        msg: 'error'
      });
      return;
    }

    // 调用服务类进行密码修改
    UsersService.changePassword(user.id, oldPassword, newPassword).then(() => {
      res.json({
        msg: 'ok'
      });
    }).catch(error => {
      res.json({
        error: error,
        msg: 'error'
      });
    });
  }





  // 获取用户列表
  getUserList(req: Request, res: Response): void {
    let offset = parseInt(req.query.offset as string) || 0;
    let limit = parseInt(req.query.limit as string) || 10;
    
    UsersService.getUserList(offset, limit).then(data => {
      res.json({
        msg: 'ok',
        datas: data.users,
        total: data.total
      });
    }).catch(error => {
      res.json({
        error: error,
        msg: 'error'
      });
    });
  }






// 修改头像方法
changeAvatar(req: Request, res: Response): void {
  let user = req.headers.user as any;
  if (!user) {
    res.status(401).json({
      error: '请先登录',
      msg: 'error'
    });
    return;
  }

  let avatar = req.body.avatar;
  if (!avatar) {
    res.json({
      error: '请提供头像URL',
      msg: 'error'
    });
    return;
  }

  UsersService.changeAvatar(user.id, avatar).then(() => {
    res.json({
      msg: 'ok'
    });
  }).catch(error => {
    res.json({
      error: error,
      msg: 'error'
    });
  });
}


// 文件上传方法
  upload(req: Request, res: Response): void {
    console.log('收到文件上传请求');
    
    if (!req.file) {
      res.json({
        error: '没有收到文件',
        msg: 'error'
      });
      return;
    }
    
    // 构建文件访问 URL
    const fileUrl = `http://localhost:3000/upload/images/${req.file.filename}`;
    
    console.log('文件上传成功:', fileUrl);
    
    res.json({
      msg: 'ok',
      url: fileUrl
    });
  }


}
// 导出控制器类
export default new Controller();
